package com.atwisdom.star.core.dsl.functionClass.statistics;


import com.alibaba.fastjson.JSONObject;
import com.atwisdom.star.common.vo.PageInfo;
import com.atwisdom.star.exception.pojo.BusinessException;

import java.math.BigDecimal;
import java.util.List;

public interface StatisticsModelDslService {

    /**
     * 查询全部摘要（通用）
     * @return 查询结果
     */
    List<JSONObject> queryAllInfo();

    /**
     * 分页查询全部摘要（通用）
     * @param pageNumber 参数
     * @param pageSize 参数
     * @param orderBy 参数
     * @return 返回全部搞要列表
     */
    PageInfo queryAllInfoByPage(int pageNumber, int pageSize, String orderBy);

    /**
     * 查询全部数据（通用）
     * @return
     */
    List<?> queryAll() ;

    //分页查询全部数据（通用）
    PageInfo listAllByPage(int pageNumber,int pageSize,String orderBy);

    /**
     * 按条件查询模型
     *
     * @param condition 查询参数
     * @param className 查询参数
     * @param orderBy 排序参数
     * @return 返回值
     */
    List<JSONObject> query(String condition,String className,String orderBy);

    /**
     * 按条件查询模型摘要
     *
     * @param pageNumber 查询参数
     * @param pageSize 查询参数
     * @param condition 查询参数
     * @param className 查询参数
     * @param orderBy 排序参数
     * @return 返回值
     */
    PageInfo queryInfoByPage(int pageNumber,int pageSize, String condition,String className,String orderBy);

    /**
     * 根据类名查询容器属性
     * @param className 类名
     * @return 返回结果
     * @throws BusinessException 异常
     */
    JSONObject queryHierProperties(String className) throws BusinessException;


    /**
     * 按条件查询模型
     *
     * @param pageNumber 查询参数
     * @param pageSize 查询参数
     * @param condition 查询参数
     * @param className 查询参数
     * @param orderBy 排序参数
     * @return 返回值
     */
    PageInfo queryByPage(int pageNumber,int pageSize, String condition,String className,String orderBy);


    /**
     * 分页查询全部版本摘要（通用）
     * @return 返回结果
     */
    PageInfo queryAllVersionInfoByPage(int pageNumber,int pageSize,String orderBy);

    /**
     *按条件和版本查询（通用）
     * @param condition 查询参数
     * @param className 类名参数
     * @param version 版本
     * @param orderBy 排序参数
     * @return 返回值
     */
    List<JSONObject> queryVersion(String condition,String className,BigDecimal version,String orderBy);

    /**
     * 分页查询全部版本摘要（通用）
     *
     * @param pageNumber 查询参数
     * @param pageSize 查询参数
     * @param condition 查询参数
     * @param className 查询参数
     * @param orderBy 排序参数
     * @return
     */
    PageInfo queryVersionInfoByPage(int pageNumber,int pageSize,String condition,String className,String orderBy);

    /**
     *设置版本有效
     * @param className 接收类名
     * @param version 接收版本
     * @return 返回结果
     */
    int setPublish(String className, BigDecimal version) ;

    /**
     * 设置版本无效
     *
     * @param className 接收参数
     * @return 返回统一结果类型(ResultInfo)
     */
    int setUnPublish(String className);

    /**
     * 版本升级
     *
     * @param className 接收参数
     * @throws BusinessException 业务异常
     * @return 返回结果
     */
   int upgrade(String className);

    /**
     * 添加新模型
     * @param type 类型
     * @param className 类名
     * @return 返回模型记录
     */
    JSONObject add(String type, String className);

    /**
     * 拷贝模型
     *
     * @param type 参数
     * @param className 参数
     * @param oldType 参数
     * @param oldClassName 参数
     * @return 返回值
     */
    JSONObject clone(String type, String className, String oldType, String oldClassName);

    /**
     * 更新模型类型和类名（配置阶段）
     * @param type 要变更的类型
     * @param className  要变更的类名
     * @param oldType   原类型
     * @param oldClassName 原类名
     * @return 返回模型记录
     */
    JSONObject updateClassName(String type, String className, String oldType, String oldClassName);

    /**
     * 更新模型属性字段
     * 更新，需要同步更新实例，同步更新历史数据
     * 1、className 和 自定字段
     *
     * @param jsonObject 参数
     * @return 返回值
     */
    JSONObject updateById(JSONObject jsonObject);

    /**
     * 更新容器属性
     * @param jsonObject 更新参数
     * @return 返回更新后模型
     */
    JSONObject updateHierProperties(JSONObject jsonObject);

    /**
     * 按ids删除模型
     * @param ids id列表
     * @return 返回结果
     */
     boolean deleteByIds(List<Long> ids);

    /**
     * 接className删除
     * 1、删除实例、2、删除历史 3、更新redis
     *
     * @param className 模型类名
     * @return 返回值
     */
    boolean deleteByClassName(String className);

    /**
     * 批量删除
     *
     * @param classNames 参数
     * @return 返回值
     */
    boolean deleteByClassNames(List<String> classNames);

    /**
     * 按Id 废除模型
     * @param ids
     * @return
     */
    boolean repealByIds(List<Long> ids);

    /**
     * 批量废除
     *
     * @param classNames 参数
     * @return 返回值
     */
    boolean repealByClassNames(List<String> classNames);
}
